package com.edu.ahm.lambda;
/*
  方法体只有一行才能 去掉花括号
* 函数式接口 ： 只有一个方法的接口
  参数只有一个才能 省略括号
* */
public class Lambda2 {
    /*
    * 静态内部类
    * */
    static class Love2 implements ILove{
        @Override
        public void love(int a) {
            System.out.println("i love you "+a);
        }
    }


    public static void main(String[] args) {

        /*
        * 局部内部类
        * */
        class Love3 implements ILove{
            @Override
            public void love(int a) {
                System.out.println(" i love you" +a);
            }
        }


        // 1
        ILove ilove = new Love();
        ilove.love(1);
        //2
        ilove = new Love2();
        ilove.love(2);
        //3
        ilove = new Love3();
        ilove.love(3);
        // 4 匿名内部类
        new ILove(){
            @Override
            public void love(int a) {
                System.out.println(" i love you"+ a);
            }
        }.love(4);
        // 5 lambda 表达式
        ilove = (int a)->{
            System.out.println(" i love you" + a);
        };
        ilove.love(5);
        // 6 lambda 表达式 简化参数
        ilove = (a)->{
            System.out.println(" i love you" + a);
        };
        ilove.love(6);
        // 7 lambda 表达式 简化括号
        ilove = a->{
            System.out.println(" i love you" + a);
        };
        ilove.love(7);
        // 7 lambda 表达式 简化花括号 主要是因为方法体里就一条
        ilove = a->System.out.println(" i love you" + a);
        ;
        ilove.love(8);
    }


}
;
interface ILove{
    void love(int a);
}

class Love implements ILove{
    @Override
    public void love(int a) {
        System.out.println(" i love you "+ a);
    }
}